package cn.sh.tools.domain.other;

import lombok.*;

/**
 * EXIF数据
 * <pre>
 *     EXIF(Exchangeable Image File)是"可交换图像文件"的缩写，当中包含了专门为数码相机的照片而定制的元数据，
 * 可以记录数码照片的拍摄参数、缩略图及其他属性信息。
 *     Exif 文件实际是JPEG文件的一种，遵从JPEG标准，只是在文件头信息中增加了有关拍摄信息的内容和索引图。
 *     Exif 信息就是由数码相机在拍摄过程中采集一系列的信息，然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部，
 * 也就是说，Exif信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数。
 *     支持类型：JPEG，TIFF，PNG，JP2，PGF，MIFF，HDP，PSP和XCF图像以及许多基于TIFF的RAW图像，甚至某些AVI中找到和MOV视频
 *     主要包含了以下几类信息：拍摄日期、拍摄器材(机身、镜头、闪光灯等)、拍摄参数(快门速度、光圈F值、ISO速度、焦距、测光模式等)、
 * 图像处理参数(锐化、对比度、饱和度、白平衡等)、图像描述及版权信息、GPS定位数据。
 * </pre>
 */
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Exif {

    private ExifIfd0 exifIfd0;

    private ExifSubIfd exifSubIfd;

    @Setter
    @Getter
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class ExifIfd0 {

        /**
         * 相机品牌，比如，SONY（索尼）
         */
        private String make;

        /**
         * 相机型号，比如，LICE-7M3
         */
        private String model;

        /**
         * 照片拍摄时间
         */
        private String dateTime;
    }

    @Setter
    @Getter
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class ExifSubIfd {

        /**
         * 焦段
         */
        private String focalLength;

        /**
         * 光圈
         */
        private String aperture;

        /**
         * 曝光时长
         */
        private String exposureTime;

        /**
         * 快门速度
         */
        private String shutterSpeed;

        /**
         * ISO感光度
         */
        private String iso;

        /**
         * 镜头规格
         */
        private String lensSpecification;
    }

}
